package 剑指offer;

public class p16数值的整数次方 {
    public double myPow(double x, int n) {
        if (x==0) return 0;

        double res=1.0;

        //int变量 n 范围是 [-2147483648, 2147483647]
        //因此当 n = -2147483648 时执行 n = -n 会因越界而赋值出错。解决方法是先将 n 存入 long 变量 nn
        long nn=n;
        if (n<0) {
            nn=-nn;
            x=1/x;
        }

        while (nn > 0) {
            if ( (nn&1) == 1) {
                res=res*x;
            }
            x=x*x;
            nn >>= 1;
        }
        return res;

    }
}
